// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
كيفية تسجيل الدخول إلى Onlyspins Casino في الإمارات: خطوات سريعة، مكافآت ونظام الدفع – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
تجربة Onlyspins: دليلك الشامل لعملية تسجيل الدخول والبدء في اللعب
يعد البحث عن منصة موثوقة وممتعة للألعاب الرقمية في دولة الإمارات أمراً يتطلب الكثير من التدقيق. إن البحث عن Onlyspins login هو الخطوة الأولى التي يتخذها اللاعبون الجدد للوصول إلى عالم واسع من الألعاب التفاعلية. في هذا المقال، سنقوم بتفكيك كل ما تحتاج لمعرفته حول منصة Onlyspins، بدءاً من إنشاء الحساب وصولاً إلى سحب الأرباح والاستمتاع بميزات الموقع المختلفة.
كيفية إتمام عملية Onlyspins login والبدء
إن عملية الوصول إلى حسابك هي تجربة مصممة لتكون سلسة وسهلة للمبتدئين والمحترفين على حد سواء. بمجرد توفر اتصال آمن بالإنترنت، يمكنك التوجه إلى الموقع الرسمي وإدخال بيانات الاعتماد الخاصة بك. نوصي دائماً بحفظ تفاصيل الدخول في مكان آمن وعدم مشاركتها مع أي جهة خارجية لضمان بقاء حسابك محمياً من أي وصول غير مصرح به.
إذا واجهت أي تأخير في الوصول، تأكد أولاً من صحة البريد الإلكتروني وكلمة المرور المستخدمة. في كثير من الأحيان، قد يكون “Caps Lock” مفعلاً في لوحة المفاتيح الخاصة بك، وهو سبب شائع لأخطاء تسجيل الدخول. إذا استمرت المشكلة، فإن فريق الدعم الفني متاح دائماً عبر الدردشة الحية لمساعدتك في استعادة الوصول إلى حسابك في غضون دقائق.
تسجيل حساب جديد: خطواتك الأولى نحو الربح
إذا كنت مستخدماً جديداً، فإن عملية التسجيل هي عملية مباشرة لا تستغرق أكثر من بضع دقائق. ستحتاج إلى توفير بيانات أساسية مثل الاسم والبريد الإلكتروني وتاريخ الميلاد لتأكيد أهليتك للعب. بعد ملء النموذج، ستتلقى رابط تفعيل عبر بريدك الإلكتروني؛ اضغط عليه، وبذلك تكون قد انتهيت من إنشاء حسابك بنجاح.
من الضروري جداً استخدام معلومات حقيقية وصحيحة أثناء التسجيل. قد تطلب المنصة في وقت لاحق إجراء عملية التحقق من الهوية (KYC)، وهي خطوة قياسية في جميع الكازينوهات المرخصة لضمان أمان النظام. استخدام بيانات غير مطابقة لهويتك الرسمية قد يؤدي إلى تعقيدات غير ضرورية عند محاولة سحب أرباحك لاحقاً.
استكشاف المكافآت ومتطلبات الرهان
واحدة من أكبر المزايا عند الانتهاء من عملية Onlyspins login هي الوصول المباشر إلى باقة المكافآت الترحيبية. غالباً ما تشمل هذه العروض مكافآت إيداع أو لفات مجانية تزيد من رصيدك المبدئي. ومع ذلك، من المهم قراءة “متطلبات الرهان” بعناية قبل قبول أي مكافأة، حيث تحدد هذه الشروط عدد المرات التي يجب عليك فيها المراهنة بقيمة المكافأة قبل أن تتمكن من سحبها.
جدول توضيحي لأنواع العروض والمكافآت
نوع المكافأة
الوصف
ملاحظات هامة
مكافأة ترحيبية
نسبة مئوية على أول إيداع لك
تخضع لمتطلبات رهان محددة
لفات مجانية
إمكانية لعب جولات إضافية على السلوتس
تقتصر على ألعاب معينة
برامج الولاء
نقاط تراكمية مقابل اللعب المستمر
يمكن استبدالها بجوائز نقدية
خيار الألعاب: من السلوتس إلى الكازينو المباشر
بمجرد دخولك إلى المنصة، ستجد تنوعاً كبيراً في الألعاب المتاحة. يحظى قسم السلوتس بشعبية كبيرة بسبب تنوع المواضيع ونسب العودة للاعب (RTP) الجذابة. إذا كنت تفضل أجواء الكازينو الحقيقي، فإن قسم “الكازينو المباشر” يتيح لك التفاعل مع موزعين حقيقيين عبر بث عالي الجودة، مما يضيف طابعاً شخصياً وتفاعلياً لتجربتك.
ننصح المبتدئين بتجربة الألعاب في “الوضع التجريبي” (Demo Mode) إذا كان متاحاً، حيث يتيح لك هذا فهم قواعد اللعبة ونظام الفوز دون المخاطرة بأموال حقيقية. بمجرد أن تشعر بالثقة في مهاراتك، يمكنك الانتقال إلى المراهنة بأموال حقيقية وزيادة وتيرة اللعب تدريجياً.
طرق الإيداع والسحب في الإمارات
تدرك المنصة أهمية توفير طرق دفع موثوقة وسريعة للاعبين في دولة الإمارات. تتنوع الوسائل المتاحة لتشمل بطاقات الائتمان، والمحافظ الإلكترونية، والتحويلات البنكية المباشرة. يتم تشفير جميع المعاملات المالية باستخدام بروتوكولات حماية متطورة لضمان عدم تعرض بياناتك البنكية لأي اختراق.
تحقق من وقت المعالجة: عادة ما تكون الإيداعات فورية، بينما قد تستغرق عمليات السحب فترة تتراوح بين يوم إلى ثلاثة أيام عمل اعتماداً على الوسيلة المختارة.
الحد الأدنى والأقصى: تأكد دائماً من مراجعة حدود الإيداع والسحب المقررة في حسابك لتجنب أي رفض للعملية.
تطابق البيانات: لا يمكنك السحب إلا عبر وسيلة تعود ملكيتها لنفس صاحب الحساب المسجل في المنصة.
الأمان والمسؤولية في اللعب
يعد الأمان حجر الزاوية في تجربتك. المنصة تستخدم تقنيات تشفير SSL لحماية خصوصيتك. علاوة على ذلك، يتم الترويج لمبادئ اللعب المسؤول بجدية؛ حيث يتم توفير أدوات تسمح لك بتحديد حدود للإيداع أو تفعيل فترة “استراحة” إذا شعرت أن وقت اللعب بدأ يأخذ حيزاً كبيراً من حياتك اليومية.
إذا كنت بحاجة إلى مساعدة أو تشعر بضغوط بسبب اللعب المستمر، فإن فريق دعم العملاء جاهز لتقديم المشورة أو المساعدة في تفعيل خيارات حظر الحساب المؤقت. إن الهدف النهائي هو الاستمتاع باللعب كنوع من الترفيه، وليس كمصدر أساسي للدخل المادي.
خلاصة حول تجربة المستخدم
في الختام، يعتبر Onlyspins خياراً مدروساً لمن يبحث عن منصة متوازنة تجمع بين الترفيه وسهولة الاستخدام. إن عملية تسجيل الدخول البسيطة، بالإضافة إلى خيارات الألعاب المتعددة، تجعل منها وجهة مفضلة للكثيرين. تذكر دائماً أن المفتاح لتجربة سعيدة هو التوازن في اللعب والاطلاع الدائم على شروط المكافآت وطرق الدفع. استمتع بوقتك، والعب بمسؤولية لضمان بقاء التجربة ممتعة وآمنة.